package com.example.springbootmybatis.entity;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ProductExample {
    protected String orderByClause;

    protected boolean distinct;

    protected List<Criteria> oredCriteria;

    public ProductExample() {
        oredCriteria = new ArrayList<Criteria>();
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    public boolean isDistinct() {
        return distinct;
    }

    public List<Criteria> getOredCriteria() {
        return oredCriteria;
    }

    public void or(Criteria criteria) {
        oredCriteria.add(criteria);
    }

    public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    protected Criteria createCriteriaInternal() {
        Criteria criteria = new Criteria();
        return criteria;
    }

    public void clear() {
        oredCriteria.clear();
        orderByClause = null;
        distinct = false;
    }

    protected abstract static class GeneratedCriteria {
        protected List<Criterion> criteria;

        protected GeneratedCriteria() {
            super();
            criteria = new ArrayList<Criterion>();
        }

        public boolean isValid() {
            return criteria.size() > 0;
        }

        public List<Criterion> getAllCriteria() {
            return criteria;
        }

        public List<Criterion> getCriteria() {
            return criteria;
        }

        protected void addCriterion(String condition) {
            if (condition == null) {
                throw new RuntimeException("Value for condition cannot be null");
            }
            criteria.add(new Criterion(condition));
        }

        protected void addCriterion(String condition, Object value, String property) {
            if (value == null) {
                throw new RuntimeException("Value for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value));
        }

        protected void addCriterion(String condition, Object value1, Object value2, String property) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Between values for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value1, value2));
        }

        public Criteria andProductCodeIsNull() {
            addCriterion("PRODUCT_CODE is null");
            return (Criteria) this;
        }

        public Criteria andProductCodeIsNotNull() {
            addCriterion("PRODUCT_CODE is not null");
            return (Criteria) this;
        }

        public Criteria andProductCodeEqualTo(String value) {
            addCriterion("PRODUCT_CODE =", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeNotEqualTo(String value) {
            addCriterion("PRODUCT_CODE <>", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeGreaterThan(String value) {
            addCriterion("PRODUCT_CODE >", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeGreaterThanOrEqualTo(String value) {
            addCriterion("PRODUCT_CODE >=", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeLessThan(String value) {
            addCriterion("PRODUCT_CODE <", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeLessThanOrEqualTo(String value) {
            addCriterion("PRODUCT_CODE <=", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeLike(String value) {
            addCriterion("PRODUCT_CODE like", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeNotLike(String value) {
            addCriterion("PRODUCT_CODE not like", value, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeIn(List<String> values) {
            addCriterion("PRODUCT_CODE in", values, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeNotIn(List<String> values) {
            addCriterion("PRODUCT_CODE not in", values, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeBetween(String value1, String value2) {
            addCriterion("PRODUCT_CODE between", value1, value2, "productCode");
            return (Criteria) this;
        }

        public Criteria andProductCodeNotBetween(String value1, String value2) {
            addCriterion("PRODUCT_CODE not between", value1, value2, "productCode");
            return (Criteria) this;
        }

        public Criteria andValidFromIsNull() {
            addCriterion("VALID_FROM is null");
            return (Criteria) this;
        }

        public Criteria andValidFromIsNotNull() {
            addCriterion("VALID_FROM is not null");
            return (Criteria) this;
        }

        public Criteria andValidFromEqualTo(String value) {
            addCriterion("VALID_FROM =", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromNotEqualTo(String value) {
            addCriterion("VALID_FROM <>", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromGreaterThan(String value) {
            addCriterion("VALID_FROM >", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromGreaterThanOrEqualTo(String value) {
            addCriterion("VALID_FROM >=", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromLessThan(String value) {
            addCriterion("VALID_FROM <", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromLessThanOrEqualTo(String value) {
            addCriterion("VALID_FROM <=", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromLike(String value) {
            addCriterion("VALID_FROM like", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromNotLike(String value) {
            addCriterion("VALID_FROM not like", value, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromIn(List<String> values) {
            addCriterion("VALID_FROM in", values, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromNotIn(List<String> values) {
            addCriterion("VALID_FROM not in", values, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromBetween(String value1, String value2) {
            addCriterion("VALID_FROM between", value1, value2, "validFrom");
            return (Criteria) this;
        }

        public Criteria andValidFromNotBetween(String value1, String value2) {
            addCriterion("VALID_FROM not between", value1, value2, "validFrom");
            return (Criteria) this;
        }

        public Criteria andProductNameIsNull() {
            addCriterion("PRODUCT_NAME is null");
            return (Criteria) this;
        }

        public Criteria andProductNameIsNotNull() {
            addCriterion("PRODUCT_NAME is not null");
            return (Criteria) this;
        }

        public Criteria andProductNameEqualTo(String value) {
            addCriterion("PRODUCT_NAME =", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameNotEqualTo(String value) {
            addCriterion("PRODUCT_NAME <>", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameGreaterThan(String value) {
            addCriterion("PRODUCT_NAME >", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameGreaterThanOrEqualTo(String value) {
            addCriterion("PRODUCT_NAME >=", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameLessThan(String value) {
            addCriterion("PRODUCT_NAME <", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameLessThanOrEqualTo(String value) {
            addCriterion("PRODUCT_NAME <=", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameLike(String value) {
            addCriterion("PRODUCT_NAME like", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameNotLike(String value) {
            addCriterion("PRODUCT_NAME not like", value, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameIn(List<String> values) {
            addCriterion("PRODUCT_NAME in", values, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameNotIn(List<String> values) {
            addCriterion("PRODUCT_NAME not in", values, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameBetween(String value1, String value2) {
            addCriterion("PRODUCT_NAME between", value1, value2, "productName");
            return (Criteria) this;
        }

        public Criteria andProductNameNotBetween(String value1, String value2) {
            addCriterion("PRODUCT_NAME not between", value1, value2, "productName");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionIsNull() {
            addCriterion("PRODUCT_DESCRIPTION is null");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionIsNotNull() {
            addCriterion("PRODUCT_DESCRIPTION is not null");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionEqualTo(String value) {
            addCriterion("PRODUCT_DESCRIPTION =", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionNotEqualTo(String value) {
            addCriterion("PRODUCT_DESCRIPTION <>", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionGreaterThan(String value) {
            addCriterion("PRODUCT_DESCRIPTION >", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionGreaterThanOrEqualTo(String value) {
            addCriterion("PRODUCT_DESCRIPTION >=", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionLessThan(String value) {
            addCriterion("PRODUCT_DESCRIPTION <", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionLessThanOrEqualTo(String value) {
            addCriterion("PRODUCT_DESCRIPTION <=", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionLike(String value) {
            addCriterion("PRODUCT_DESCRIPTION like", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionNotLike(String value) {
            addCriterion("PRODUCT_DESCRIPTION not like", value, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionIn(List<String> values) {
            addCriterion("PRODUCT_DESCRIPTION in", values, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionNotIn(List<String> values) {
            addCriterion("PRODUCT_DESCRIPTION not in", values, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionBetween(String value1, String value2) {
            addCriterion("PRODUCT_DESCRIPTION between", value1, value2, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductDescriptionNotBetween(String value1, String value2) {
            addCriterion("PRODUCT_DESCRIPTION not between", value1, value2, "productDescription");
            return (Criteria) this;
        }

        public Criteria andProductCategoryIsNull() {
            addCriterion("PRODUCT_CATEGORY is null");
            return (Criteria) this;
        }

        public Criteria andProductCategoryIsNotNull() {
            addCriterion("PRODUCT_CATEGORY is not null");
            return (Criteria) this;
        }

        public Criteria andProductCategoryEqualTo(String value) {
            addCriterion("PRODUCT_CATEGORY =", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryNotEqualTo(String value) {
            addCriterion("PRODUCT_CATEGORY <>", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryGreaterThan(String value) {
            addCriterion("PRODUCT_CATEGORY >", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryGreaterThanOrEqualTo(String value) {
            addCriterion("PRODUCT_CATEGORY >=", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryLessThan(String value) {
            addCriterion("PRODUCT_CATEGORY <", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryLessThanOrEqualTo(String value) {
            addCriterion("PRODUCT_CATEGORY <=", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryLike(String value) {
            addCriterion("PRODUCT_CATEGORY like", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryNotLike(String value) {
            addCriterion("PRODUCT_CATEGORY not like", value, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryIn(List<String> values) {
            addCriterion("PRODUCT_CATEGORY in", values, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryNotIn(List<String> values) {
            addCriterion("PRODUCT_CATEGORY not in", values, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryBetween(String value1, String value2) {
            addCriterion("PRODUCT_CATEGORY between", value1, value2, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductCategoryNotBetween(String value1, String value2) {
            addCriterion("PRODUCT_CATEGORY not between", value1, value2, "productCategory");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceIsNull() {
            addCriterion("PRODUCT_UNITPRICE is null");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceIsNotNull() {
            addCriterion("PRODUCT_UNITPRICE is not null");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceEqualTo(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE =", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceNotEqualTo(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE <>", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceGreaterThan(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE >", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceGreaterThanOrEqualTo(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE >=", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceLessThan(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE <", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceLessThanOrEqualTo(BigDecimal value) {
            addCriterion("PRODUCT_UNITPRICE <=", value, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceIn(List<BigDecimal> values) {
            addCriterion("PRODUCT_UNITPRICE in", values, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceNotIn(List<BigDecimal> values) {
            addCriterion("PRODUCT_UNITPRICE not in", values, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceBetween(BigDecimal value1, BigDecimal value2) {
            addCriterion("PRODUCT_UNITPRICE between", value1, value2, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductUnitpriceNotBetween(BigDecimal value1, BigDecimal value2) {
            addCriterion("PRODUCT_UNITPRICE not between", value1, value2, "productUnitprice");
            return (Criteria) this;
        }

        public Criteria andProductInventoryIsNull() {
            addCriterion("PRODUCT_INVENTORY is null");
            return (Criteria) this;
        }

        public Criteria andProductInventoryIsNotNull() {
            addCriterion("PRODUCT_INVENTORY is not null");
            return (Criteria) this;
        }

        public Criteria andProductInventoryEqualTo(String value) {
            addCriterion("PRODUCT_INVENTORY =", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryNotEqualTo(String value) {
            addCriterion("PRODUCT_INVENTORY <>", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryGreaterThan(String value) {
            addCriterion("PRODUCT_INVENTORY >", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryGreaterThanOrEqualTo(String value) {
            addCriterion("PRODUCT_INVENTORY >=", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryLessThan(String value) {
            addCriterion("PRODUCT_INVENTORY <", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryLessThanOrEqualTo(String value) {
            addCriterion("PRODUCT_INVENTORY <=", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryLike(String value) {
            addCriterion("PRODUCT_INVENTORY like", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryNotLike(String value) {
            addCriterion("PRODUCT_INVENTORY not like", value, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryIn(List<String> values) {
            addCriterion("PRODUCT_INVENTORY in", values, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryNotIn(List<String> values) {
            addCriterion("PRODUCT_INVENTORY not in", values, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryBetween(String value1, String value2) {
            addCriterion("PRODUCT_INVENTORY between", value1, value2, "productInventory");
            return (Criteria) this;
        }

        public Criteria andProductInventoryNotBetween(String value1, String value2) {
            addCriterion("PRODUCT_INVENTORY not between", value1, value2, "productInventory");
            return (Criteria) this;
        }

        public Criteria andValidToIsNull() {
            addCriterion("VALID_TO is null");
            return (Criteria) this;
        }

        public Criteria andValidToIsNotNull() {
            addCriterion("VALID_TO is not null");
            return (Criteria) this;
        }

        public Criteria andValidToEqualTo(String value) {
            addCriterion("VALID_TO =", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToNotEqualTo(String value) {
            addCriterion("VALID_TO <>", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToGreaterThan(String value) {
            addCriterion("VALID_TO >", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToGreaterThanOrEqualTo(String value) {
            addCriterion("VALID_TO >=", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToLessThan(String value) {
            addCriterion("VALID_TO <", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToLessThanOrEqualTo(String value) {
            addCriterion("VALID_TO <=", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToLike(String value) {
            addCriterion("VALID_TO like", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToNotLike(String value) {
            addCriterion("VALID_TO not like", value, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToIn(List<String> values) {
            addCriterion("VALID_TO in", values, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToNotIn(List<String> values) {
            addCriterion("VALID_TO not in", values, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToBetween(String value1, String value2) {
            addCriterion("VALID_TO between", value1, value2, "validTo");
            return (Criteria) this;
        }

        public Criteria andValidToNotBetween(String value1, String value2) {
            addCriterion("VALID_TO not between", value1, value2, "validTo");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeIsNull() {
            addCriterion("INSERT_USERCODE is null");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeIsNotNull() {
            addCriterion("INSERT_USERCODE is not null");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeEqualTo(String value) {
            addCriterion("INSERT_USERCODE =", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeNotEqualTo(String value) {
            addCriterion("INSERT_USERCODE <>", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeGreaterThan(String value) {
            addCriterion("INSERT_USERCODE >", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeGreaterThanOrEqualTo(String value) {
            addCriterion("INSERT_USERCODE >=", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeLessThan(String value) {
            addCriterion("INSERT_USERCODE <", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeLessThanOrEqualTo(String value) {
            addCriterion("INSERT_USERCODE <=", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeLike(String value) {
            addCriterion("INSERT_USERCODE like", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeNotLike(String value) {
            addCriterion("INSERT_USERCODE not like", value, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeIn(List<String> values) {
            addCriterion("INSERT_USERCODE in", values, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeNotIn(List<String> values) {
            addCriterion("INSERT_USERCODE not in", values, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeBetween(String value1, String value2) {
            addCriterion("INSERT_USERCODE between", value1, value2, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertUsercodeNotBetween(String value1, String value2) {
            addCriterion("INSERT_USERCODE not between", value1, value2, "insertUsercode");
            return (Criteria) this;
        }

        public Criteria andInsertTimeIsNull() {
            addCriterion("INSERT_TIME is null");
            return (Criteria) this;
        }

        public Criteria andInsertTimeIsNotNull() {
            addCriterion("INSERT_TIME is not null");
            return (Criteria) this;
        }

        public Criteria andInsertTimeEqualTo(Date value) {
            addCriterion("INSERT_TIME =", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeNotEqualTo(Date value) {
            addCriterion("INSERT_TIME <>", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeGreaterThan(Date value) {
            addCriterion("INSERT_TIME >", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeGreaterThanOrEqualTo(Date value) {
            addCriterion("INSERT_TIME >=", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeLessThan(Date value) {
            addCriterion("INSERT_TIME <", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeLessThanOrEqualTo(Date value) {
            addCriterion("INSERT_TIME <=", value, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeIn(List<Date> values) {
            addCriterion("INSERT_TIME in", values, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeNotIn(List<Date> values) {
            addCriterion("INSERT_TIME not in", values, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeBetween(Date value1, Date value2) {
            addCriterion("INSERT_TIME between", value1, value2, "insertTime");
            return (Criteria) this;
        }

        public Criteria andInsertTimeNotBetween(Date value1, Date value2) {
            addCriterion("INSERT_TIME not between", value1, value2, "insertTime");
            return (Criteria) this;
        }
    }

    public static class Criteria extends GeneratedCriteria {

        protected Criteria() {
            super();
        }
    }

    public static class Criterion {
        private String condition;

        private Object value;

        private Object secondValue;

        private boolean noValue;

        private boolean singleValue;

        private boolean betweenValue;

        private boolean listValue;

        private String typeHandler;

        public String getCondition() {
            return condition;
        }

        public Object getValue() {
            return value;
        }

        public Object getSecondValue() {
            return secondValue;
        }

        public boolean isNoValue() {
            return noValue;
        }

        public boolean isSingleValue() {
            return singleValue;
        }

        public boolean isBetweenValue() {
            return betweenValue;
        }

        public boolean isListValue() {
            return listValue;
        }

        public String getTypeHandler() {
            return typeHandler;
        }

        protected Criterion(String condition) {
            super();
            this.condition = condition;
            this.typeHandler = null;
            this.noValue = true;
        }

        protected Criterion(String condition, Object value, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.typeHandler = typeHandler;
            if (value instanceof List<?>) {
                this.listValue = true;
            } else {
                this.singleValue = true;
            }
        }

        protected Criterion(String condition, Object value) {
            this(condition, value, null);
        }

        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.secondValue = secondValue;
            this.typeHandler = typeHandler;
            this.betweenValue = true;
        }

        protected Criterion(String condition, Object value, Object secondValue) {
            this(condition, value, secondValue, null);
        }
    }
}